package com.itheima.controller;

import com.itheima.code.Code;
import com.itheima.exception.BusinessException;
import com.itheima.exception.SystemException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
//为Rest风格开发的控制器类做增强
//此注解自带@ResponseBody注解与@ControllerAdvice注解，具备对应的功能
@RestControllerAdvice
public class ProjectExceptionAdvice {

    /*
        专门处理Exception类型异常的通知
        1. 此方法在controller层代码抛出异常之后
        2. 并且此异常类型为Exception,那么此方法就会运行
        3. 而且参数ex就是所发生的异常
     */

    //专门处理BusinessException
    @ExceptionHandler(BusinessException.class)
    public Result doBusinessException(BusinessException ex){
        //发送对应消息传递给用户，提醒规范操作
        return new Result(ex.getCode(),ex.getMessage());
    }

    //专门处理SystemException
    @ExceptionHandler(SystemException.class)
    public Result doSystemException(SystemException ex){
//        发送固定消息传递给用户，安抚用户
//        发送特定消息给运维人员，提醒维护
//                记录日志
        return new Result(ex.getCode(),ex.getMessage());
    }

    //处理其他未知异常
    @ExceptionHandler(Exception.class)
    public Result doException(Exception ex){

        return new Result(Code.SYSTEM_UNKNOW_ERR,"服务器正在维护,请稍后访问");
    }
}
